home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-10-28 | 48.6 KB | 1,387 lines |
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- NNNNAAAAMMMMEEEE
- ExtUtils::MakeMaker - create an extension Makefile
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- use ExtUtils::MakeMaker;
-
- WriteMakefile( ATTRIBUTE => VALUE [, ...] );
-
- which is really
-
- MM->new(\%att)->flush;
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- This utility is designed to write a Makefile for an
- extension module from a Makefile.PL. It is based on the
- Makefile.SH model provided by Andy Dougherty and the perl5-
- porters.
-
- It splits the task of generating the Makefile into several
- subroutines that can be individually overridden. Each
- subroutine returns the text it wishes to have written to the
- Makefile.
-
- MakeMaker is object oriented. Each directory below the
- current directory that contains a Makefile.PL. Is treated as
- a separate object. This makes it possible to write an
- unlimited number of Makefiles with a single invocation of
- _W_r_i_t_e_M_a_k_e_f_i_l_e().
-
- HHHHoooowwww TTTToooo WWWWrrrriiiitttteeee AAAA MMMMaaaakkkkeeeeffffiiiilllleeee....PPPPLLLL
-
- The short answer is: Don't.
-
- Always begin with h2xs.
- Always begin with h2xs!
- ALWAYS BEGIN WITH H2XS!
-
- even if you're not building around a header file, and even
- if you don't have an XS component.
-
- Run _h_2_x_s(1) before you start thinking about writing a
- module. For so called pm-only modules that consist of *.pm
- files only, h2xs has the -X switch. This will generate dummy
- files of all kinds that are useful for the module developer.
-
- The medium answer is:
-
- use ExtUtils::MakeMaker;
- WriteMakefile( NAME => "Foo::Bar" );
-
- The long answer is the rest of the manpage :-)
-
-
-
-
- Page 1 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- DDDDeeeeffffaaaauuuulllltttt MMMMaaaakkkkeeeeffffiiiilllleeee BBBBeeeehhhhaaaavvvviiiioooouuuurrrr
-
- The generated Makefile enables the user of the extension to
- invoke
-
- perl Makefile.PL # optionally "perl Makefile.PL verbose"
- make
- make test # optionally set TEST_VERBOSE=1
- make install # See below
-
- The Makefile to be produced may be altered by adding
- arguments of the form KEY=VALUE. E.g.
-
- perl Makefile.PL PREFIX=/tmp/myperl5
-
- Other interesting targets in the generated Makefile are
-
- make config # to check if the Makefile is up-to-date
- make clean # delete local temp files (Makefile gets renamed)
- make realclean # delete derived files (including ./blib)
- make ci # check in all the files in the MANIFEST file
- make dist # see below the Distribution Support section
-
-
- mmmmaaaakkkkeeee tttteeeesssstttt
-
- MakeMaker checks for the existence of a file named _t_e_s_t._p_l
- in the current directory and if it exists it adds commands
- to the test target of the generated Makefile that will
- execute the script with the proper set of perl -I options.
-
- MakeMaker also checks for any files matching _g_l_o_b("t/*.t").
- It will add commands to the test target of the generated
- Makefile that execute all matching files via the the
- _T_e_s_t::_H_a_r_n_e_s_s manpage module with the -I switches set
- correctly.
-
- mmmmaaaakkkkeeee tttteeeessssttttddddbbbb
-
- A useful variation of the above is the target testdb. It
- runs the test under the Perl debugger (see the _p_e_r_l_d_e_b_u_g
- manpage). If the file _t_e_s_t._p_l exists in the current
- directory, it is used for the test.
-
- If you want to debug some other testfile, set TEST_FILE
- variable thusly:
-
- make testdb TEST_FILE=t/mytest.t
-
- By default the debugger is called using -d option to perl.
- If you want to specify some other option, set TESTDB_SW
- variable:
-
-
-
- Page 2 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- make testdb TESTDB_SW=-Dx
-
-
- mmmmaaaakkkkeeee iiiinnnnssssttttaaaallllllll
-
- make alone puts all relevant files into directories that are
- named by the macros INST_LIB, INST_ARCHLIB, INST_SCRIPT,
- INST_MAN1DIR, and INST_MAN3DIR. All these default to
- something below ./blib if you are _n_o_t building below the
- perl source directory. If you _a_r_e building below the perl
- source, INST_LIB and INST_ARCHLIB default to
- ../../lib, and INST_SCRIPT is not defined.
-
- The _i_n_s_t_a_l_l target of the generated Makefile copies the
- files found below each of the INST_* directories to their
- INSTALL* counterparts. Which counterparts are chosen depends
- on the setting of INSTALLDIRS according to the following
- table:
-
- INSTALLDIRS set to
- perl site
-
- INST_ARCHLIB INSTALLARCHLIB INSTALLSITEARCH
- INST_LIB INSTALLPRIVLIB INSTALLSITELIB
- INST_BIN INSTALLBIN
- INST_SCRIPT INSTALLSCRIPT
- INST_MAN1DIR INSTALLMAN1DIR
- INST_MAN3DIR INSTALLMAN3DIR
-
- The INSTALL... macros in turn default to their %Config
- ($Config{installprivlib}, $Config{installarchlib}, etc.)
- counterparts.
-
- You can check the values of these variables on your system
- with
-
- perl '-V:install.*'
-
- And to check the sequence in which the library directories
- are searched by perl, run
-
- perl -le 'print join $/, @INC'
-
-
- PPPPRRRREEEEFFFFIIIIXXXX aaaannnndddd LLLLIIIIBBBB aaaattttttttrrrriiiibbbbuuuutttteeee
-
- PREFIX and LIB can be used to set several INSTALL*
- attributes in one go. The quickest way to install a module
- in a non-standard place might be
-
- perl Makefile.PL LIB=~/lib
-
-
-
-
- Page 3 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- This will install the module's architecture-independent
- files into ~/lib, the architecture-dependent files into
- ~/lib/$archname/auto.
-
- Another way to specify many INSTALL directories with a
- single parameter is PREFIX.
-
- perl Makefile.PL PREFIX=~
-
- This will replace the string specified by $Config{prefix} in
- all $Config{install*} values.
-
- Note, that in both cases the tilde expansion is done by
- MakeMaker, not by perl by default, nor by make. Conflicts
- between parmeters LIB, PREFIX and the various INSTALL*
- arguments are resolved so that XXX
-
- If the user has superuser privileges, and is not working on
- AFS (Andrew File System) or relatives, then the defaults for
- INSTALLPRIVLIB, INSTALLARCHLIB, INSTALLSCRIPT, etc. will be
- appropriate, and this incantation will be the best:
-
- perl Makefile.PL; make; make test
- make install
-
- make install per default writes some documentation of what
- has been done into the file $(INSTALLARCHLIB)/perllocal.pod.
- This feature can be bypassed by calling make pure_install.
-
- AAAAFFFFSSSS uuuusssseeeerrrrssss
-
- will have to specify the installation directories as these
- most probably have changed since perl itself has been
- installed. They will have to do this by calling
-
- perl Makefile.PL INSTALLSITELIB=/afs/here/today \
- INSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages
- make
-
- Be careful to repeat this procedure every time you recompile
- an extension, unless you are sure the AFS installation
- directories are still valid.
-
- SSSSttttaaaattttiiiicccc LLLLiiiinnnnkkkkiiiinnnngggg ooooffff aaaa nnnneeeewwww PPPPeeeerrrrllll BBBBiiiinnnnaaaarrrryyyy
-
- An extension that is built with the above steps is ready to
- use on systems supporting dynamic loading. On systems that
- do not support dynamic loading, any newly created extension
- has to be linked together with the available resources.
- MakeMaker supports the linking process by creating
- appropriate targets in the Makefile whenever an extension is
- built. You can invoke the corresponding section of the
-
-
-
- Page 4 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- makefile with
-
- make perl
-
- That produces a new perl binary in the current directory
- with all extensions linked in that can be found in
- INST_ARCHLIB , SITELIBEXP, and PERL_ARCHLIB. To do that,
- MakeMaker writes a new Makefile, on UNIX, this is called
- Makefile.aperl (may be system dependent). If you want to
- force the creation of a new perl, it is recommended, that
- you delete this Makefile.aperl, so the directories are
- searched-through for linkable libraries again.
-
- The binary can be installed into the directory where perl
- normally resides on your machine with
-
- make inst_perl
-
- To produce a perl binary with a different name than perl,
- either say
-
- perl Makefile.PL MAP_TARGET=myperl
- make myperl
- make inst_perl
-
- or say
-
- perl Makefile.PL
- make myperl MAP_TARGET=myperl
- make inst_perl MAP_TARGET=myperl
-
- In any case you will be prompted with the correct invocation
- of the inst_perl target that installs the new binary into
- INSTALLBIN.
-
- make inst_perl per default writes some documentation of what
- has been done into the file $(INSTALLARCHLIB)/perllocal.pod.
- This can be bypassed by calling make pure_inst_perl.
-
- Warning: the inst_perl: target will most probably overwrite
- your existing perl binary. Use with care!
-
- Sometimes you might want to build a statically linked perl
- although your system supports dynamic loading. In this case
- you may explicitly set the linktype with the invocation of
- the Makefile.PL or make:
-
- perl Makefile.PL LINKTYPE=static # recommended
-
- or
-
- make LINKTYPE=static # works on most systems
-
-
-
- Page 5 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- DDDDeeeetttteeeerrrrmmmmiiiinnnnaaaattttiiiioooonnnn ooooffff PPPPeeeerrrrllll LLLLiiiibbbbrrrraaaarrrryyyy aaaannnndddd IIIInnnnssssttttaaaallllllllaaaattttiiiioooonnnn LLLLooooccccaaaattttiiiioooonnnnssss
-
- MakeMaker needs to know, or to guess, where certain things
- are located. Especially INST_LIB and INST_ARCHLIB (where to
- put the files during the _m_a_k_e(1) run), PERL_LIB and
- PERL_ARCHLIB (where to read existing modules from), and
- PERL_INC (header files and libperl*.*).
-
- Extensions may be built either using the contents of the
- perl source directory tree or from the installed perl
- library. The recommended way is to build extensions after
- you have run 'make install' on perl itself. You can do that
- in any directory on your hard disk that is not below the
- perl source tree. The support for extensions below the ext
- directory of the perl distribution is only good for the
- standard extensions that come with perl.
-
- If an extension is being built below the ext/ directory of
- the perl source then MakeMaker will set PERL_SRC
- automatically (e.g., ../..). If PERL_SRC is defined and the
- extension is recognized as a standard extension, then other
- variables default to the following:
-
- PERL_INC = PERL_SRC
- PERL_LIB = PERL_SRC/lib
- PERL_ARCHLIB = PERL_SRC/lib
- INST_LIB = PERL_LIB
- INST_ARCHLIB = PERL_ARCHLIB
-
- If an extension is being built away from the perl source
- then MakeMaker will leave PERL_SRC undefined and default to
- using the installed copy of the perl library. The other
- variables default to the following:
-
- PERL_INC = $archlibexp/CORE
- PERL_LIB = $privlibexp
- PERL_ARCHLIB = $archlibexp
- INST_LIB = ./blib/lib
- INST_ARCHLIB = ./blib/arch
-
- If perl has not yet been installed then PERL_SRC can be
- defined on the command line as shown in the previous
- section.
-
- WWWWhhhhiiiicccchhhh aaaarrrrcccchhhhiiiitttteeeeccccttttuuuurrrreeee ddddeeeeppppeeeennnnddddeeeennnntttt ddddiiiirrrreeeeccccttttoooorrrryyyy????
-
- If you don't want to keep the defaults for the INSTALL*
- macros, MakeMaker helps you to minimize the typing needed:
- the usual relationship between INSTALLPRIVLIB and
- INSTALLARCHLIB is determined by Configure at perl
- compilation time. MakeMaker supports the user who sets
- INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB
-
-
-
- Page 6 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- not, then MakeMaker defaults the latter to be the same
- subdirectory of INSTALLPRIVLIB as Configure decided for the
- counterparts in %Config , otherwise it defaults to
- INSTALLPRIVLIB. The same relationship holds for
- INSTALLSITELIB and INSTALLSITEARCH.
-
- MakeMaker gives you much more freedom than needed to
- configure internal variables and get different results. It
- is worth to mention, that _m_a_k_e(1) also lets you configure
- most of the variables that are used in the Makefile. But in
- the majority of situations this will not be necessary, and
- should only be done, if the author of a package recommends
- it (or you know what you're doing).
-
- UUUUssssiiiinnnngggg AAAAttttttttrrrriiiibbbbuuuutttteeeessss aaaannnndddd PPPPaaaarrrraaaammmmeeeetttteeeerrrrssss
-
- The following attributes can be specified as arguments to
- _W_r_i_t_e_M_a_k_e_f_i_l_e() or as NAME=VALUE pairs on the command line:
-
- C Ref to array of *.c file names. Initialised from a
- directory scan and the values portion of the XS attribute
- hash. This is not currently used by MakeMaker but may be
- handy in Makefile.PLs.
-
- CCFLAGS
- String that will be included in the compiler call command
- line between the arguments INC and OPTIMIZE.
-
- CONFIG
- Arrayref. E.g. [_q_w(archname manext)] defines ARCHNAME &
- MANEXT from config.sh. MakeMaker will add to CONFIG the
- following values anyway: ar cc cccdlflags ccdlflags dlext
- dlsrc ld lddlflags ldflags libc lib_ext obj_ext ranlib
- sitelibexp sitearchexp so
-
- CONFIGURE
- CODE reference. The subroutine should return a hash
- reference. The hash may contain further attributes, e.g.
- {LIBS => ...}, that have to be determined by some
- evaluation method.
-
- DEFINE
- Something like "-DHAVE_UNISTD_H"
-
- DIR
- Ref to array of subdirectories containing Makefile.PLs
- e.g. [ 'sdbm' ] in ext/SDBM_File
-
- DISTNAME
- Your name for distributing the package (by tar file). This
- defaults to NAME above.
-
-
-
-
- Page 7 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- DL_FUNCS
- Hashref of symbol names for routines to be made available
- as universal symbols. Each key/value pair consists of the
- package name and an array of routine names in that
- package. Used only under AIX (export lists) and VMS
- (linker options) at present. The routine names supplied
- will be expanded in the same way as XSUB names are
- expanded by the _X_S() macro. Defaults to
-
- {"$(NAME)" => ["boot_$(NAME)" ] }
-
- e.g.
-
- {"RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )],
- "NetconfigPtr" => [ 'DESTROY'] }
-
-
- DL_VARS
- Array of symbol names for variables to be made available
- as universal symbols. Used only under AIX (export lists)
- and VMS (linker options) at present. Defaults to [].
- (e.g. [ _q_w( Foo_version Foo_numstreams Foo_tree ) ])
-
- EXCLUDE_EXT
- Array of extension names to exclude when doing a static
- build. This is ignored if INCLUDE_EXT is present.
- Consult INCLUDE_EXT for more details. (e.g. [ _q_w( Socket
- POSIX ) ] )
-
- This attribute may be most useful when specified as a
- string on the commandline: perl Makefile.PL
- EXCLUDE_EXT='Socket Safe'
-
- EXE_FILES
- Ref to array of executable files. The files will be copied
- to the INST_SCRIPT directory. Make realclean will delete
- them from there again.
-
- NO_VC
- In general any generated Makefile checks for the current
- version of MakeMaker and the version the Makefile was
- built under. If NO_VC is set, the version check is
- neglected. Do not write this into your Makefile.PL, use it
- interactively instead.
-
- FIRST_MAKEFILE
- The name of the Makefile to be produced. Defaults to the
- contents of MAKEFILE, but can be overridden. This is used
- for the second Makefile that will be produced for the
- MAP_TARGET.
-
-
-
-
-
- Page 8 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- FULLPERL
- Perl binary able to run this extension.
-
- H Ref to array of *.h file names. Similar to C.
-
- IMPORTS
- IMPORTS is only used on OS/2.
-
- INC
- Include file dirs eg: "-I/usr/5include -I/path/to/inc"
-
- INCLUDE_EXT
- Array of extension names to be included when doing a
- static build. MakeMaker will normally build with all of
- the installed extensions when doing a static build, and
- that is usually the desired behavior. If INCLUDE_EXT is
- present then MakeMaker will build only with those
- extensions which are explicitly mentioned. (e.g. [ _q_w(
- Socket POSIX ) ])
-
- It is not necessary to mention DynaLoader or the current
- extension when filling in INCLUDE_EXT. If the INCLUDE_EXT
- is mentioned but is empty then only DynaLoader and the
- current extension will be included in the build.
-
- This attribute may be most useful when specified as a
- string on the commandline: perl Makefile.PL
- INCLUDE_EXT='POSIX Socket Devel::Peek'
-
- INSTALLARCHLIB
- Used by 'make install', which copies files from
- INST_ARCHLIB to this directory if INSTALLDIRS is set to
- perl.
-
- INSTALLBIN
- Directory to install binary files (e.g. tkperl) into.
-
- INSTALLDIRS
- Determines which of the two sets of installation
- directories to choose: installprivlib and installarchlib
- versus installsitelib and installsitearch. The first pair
- is chosen with INSTALLDIRS=perl, the second with
- INSTALLDIRS=site. Default is site.
-
- INSTALLMAN1DIR
- This directory gets the man pages at 'make install' time.
- Defaults to $Config{installman1dir}.
-
- INSTALLMAN3DIR
- This directory gets the man pages at 'make install' time.
- Defaults to $Config{installman3dir}.
-
-
-
-
- Page 9 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- INSTALLPRIVLIB
- Used by 'make install', which copies files from INST_LIB
- to this directory if INSTALLDIRS is set to perl.
-
- INSTALLSCRIPT
- Used by 'make install' which copies files from INST_SCRIPT
- to this directory.
-
- INSTALLSITELIB
- Used by 'make install', which copies files from INST_LIB
- to this directory if INSTALLDIRS is set to site (default).
-
- INSTALLSITEARCH
- Used by 'make install', which copies files from
- INST_ARCHLIB to this directory if INSTALLDIRS is set to
- site (default).
-
- INST_ARCHLIB
- Same as INST_LIB for architecture dependent files.
-
- INST_BIN
- Directory to put real binary files during 'make'. These
- will be copied to INSTALLBIN during 'make install'
-
- INST_EXE
- Old name for INST_SCRIPT. Deprecated. Please use
- INST_SCRIPT if you need to use it.
-
- INST_LIB
- Directory where we put library files of this extension
- while building it.
-
- INST_MAN1DIR
- Directory to hold the man pages at 'make' time
-
- INST_MAN3DIR
- Directory to hold the man pages at 'make' time
-
- INST_SCRIPT
- Directory, where executable files should be installed
- during 'make'. Defaults to "./blib/bin", just to have a
- dummy location during testing. make install will copy the
- files in INST_SCRIPT to INSTALLSCRIPT.
-
- LDFROM
- defaults to "$(OBJECT)" and is used in the ld command to
- specify what files to link/load from (also see dynamic_lib
- below for how to specify ld flags)
-
- LIBPERL_A
- The filename of the perllibrary that will be used together
- with this extension. Defaults to libperl.a.
-
-
-
- Page 10 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- LIB
- LIB can only be set at perl Makefile.PL time. It has the
- effect of setting both INSTALLPRIVLIB and INSTALLSITELIB
- to that value regardless any
-
- LIBS
- An anonymous array of alternative library specifications
- to be searched for (in order) until at least one library
- is found. E.g.
-
- 'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]
-
- Mind, that any element of the array contains a complete
- set of arguments for the ld command. So do not specify
-
- 'LIBS' => ["-ltcl", "-ltk", "-lX11"]
-
- See ODBM_File/Makefile.PL for an example, where an array
- is needed. If you specify a scalar as in
-
- 'LIBS' => "-ltcl -ltk -lX11"
-
- MakeMaker will turn it into an array with one element.
-
- LINKTYPE
- 'static' or 'dynamic' (default unless usedl=undef in
- config.sh). Should only be used to force static linking
- (also see linkext below).
-
- MAKEAPERL
- Boolean which tells MakeMaker, that it should include the
- rules to make a perl. This is handled automatically as a
- switch by MakeMaker. The user normally does not need it.
-
- MAKEFILE
- The name of the Makefile to be produced.
-
- MAN1PODS
- Hashref of pod-containing files. MakeMaker will default
- this to all EXE_FILES files that include POD directives.
- The files listed here will be converted to man pages and
- installed as was requested at Configure time.
-
- MAN3PODS
- Hashref of .pm and .pod files. MakeMaker will default this
- to all
- .pod and any .pm files that include POD directives. The
- files listed here will be converted to man pages and
- installed as was requested at Configure time.
-
- MAP_TARGET
- If it is intended, that a new perl binary be produced,
-
-
-
- Page 11 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- this variable may hold a name for that binary. Defaults to
- perl
-
- MYEXTLIB
- If the extension links to a library that it builds set
- this to the name of the library (see SDBM_File)
-
- NAME
- Perl module name for this extension (DBD::Oracle). This
- will default to the directory name but should be
- explicitly defined in the Makefile.PL.
-
- NEEDS_LINKING
- MakeMaker will figure out, if an extension contains
- linkable code anywhere down the directory tree, and will
- set this variable accordingly, but you can speed it up a
- very little bit, if you define this boolean variable
- yourself.
-
- NOECHO
- Defaults to @. By setting it to an empty string you can
- generate a Makefile that echos all commands. Mainly used
- in debugging MakeMaker itself.
-
- NORECURS
- Boolean. Attribute to inhibit descending into
- subdirectories.
-
- OBJECT
- List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)',
- but can be a long string containing all object files, e.g.
- "tkpBind.o tkpButton.o tkpCanvas.o"
-
- OPTIMIZE
- Defaults to -O. Set it to -g to turn debugging on. The
- flag is passed to subdirectory makes.
-
- PERL
- Perl binary for tasks that can be done by miniperl
-
- PERLMAINCC
- The call to the program that is able to compile
- perlmain.c. Defaults to $(CC).
-
- PERL_ARCHLIB
- Same as above for architecture dependent files
-
- PERL_LIB
- Directory containing the Perl library to use.
-
- PERL_SRC
- Directory containing the Perl source code (use of this
-
-
-
- Page 12 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- should be avoided, it may be undefined)
-
- PERM_RW
- Desired Permission for read/writable files. Defaults to
- 644. See also the perm_rw entry in the _M_M__U_n_i_x manpage.
-
- PERM_RWX
- Desired permission for executable files. Defaults to 755.
- See also the perm_rwx entry in the _M_M__U_n_i_x manpage.
-
- PL_FILES
- Ref to hash of files to be processed as perl programs.
- MakeMaker will default to any found *.PL file (except
- Makefile.PL) being keys and the basename of the file being
- the value. E.g.
-
- {'foobar.PL' => 'foobar'}
-
- The *.PL files are expected to produce output to the
- target files themselves.
-
- PM
- Hashref of .pm files and *.pl files to be installed. e.g.
-
- {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
-
- By default this will include *.pm and *.pl and the files
- found in the PMLIBDIRS directories. Defining PM in the
- Makefile.PL will override PMLIBDIRS.
-
- PMLIBDIRS
- Ref to array of subdirectories containing library files.
- Defaults to [ 'lib', $(BASEEXT) ]. The directories will be
- scanned and _a_n_y files they contain will be installed in
- the corresponding location in the library. A _l_i_b_s_c_a_n()
- method can be used to alter the behaviour. Defining PM in
- the Makefile.PL will override PMLIBDIRS.
-
- PREFIX
- Can be used to set the three INSTALL* attributes in one go
- (except for probably INSTALLMAN1DIR, if it is not below
- PREFIX according to %Config). They will have PREFIX as a
- common directory node and will branch from that node into
- lib/, lib/ARCHNAME or whatever Configure decided at the
- build time of your perl (unless you override one of them,
- of course).
-
- PREREQ_PM
- Hashref: Names of modules that need to be available to run
- this extension (e.g. Fcntl for SDBM_File) are the keys of
- the hash and the desired version is the value. If the
- required version number is 0, we only check if any version
-
-
-
- Page 13 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- is installed already.
-
- SKIP
- Arryref. E.g. [_q_w(name1 name2)] skip (do not write)
- sections of the Makefile. Caution! Do not use the SKIP
- attribute for the neglectible speedup. It may seriously
- damage the resulting Makefile. Only use it, if you really
- need it.
-
- TYPEMAPS
- Ref to array of typemap file names. Use this when the
- typemaps are in some directory other than the current
- directory or when they are not named ttttyyyyppppeeeemmmmaaaapppp. The last
- typemap in the list takes precedence. A typemap in the
- current directory has highest precedence, even if it isn't
- listed in TYPEMAPS. The default system typemap has lowest
- precedence.
-
- VERSION
- Your version number for distributing the package. This
- defaults to 0.1.
-
- VERSION_FROM
- Instead of specifying the VERSION in the Makefile.PL you
- can let MakeMaker parse a file to determine the version
- number. The parsing routine requires that the file named
- by VERSION_FROM contains one single line to compute the
- version number. The first line in the file that contains
- the regular expression
-
- /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
-
- will be evaluated with _e_v_a_l() and the value of the named
- variable aaaafffftttteeeerrrr the _e_v_a_l() will be assigned to the VERSION
- attribute of the MakeMaker object. The following lines
- will be parsed o.k.:
-
- $VERSION = '1.00';
- *VERSION = \'1.01';
- ( $VERSION ) = '$Revision: 1.222 $ ' =~ /\$Revision:\s+([^\s]+)/;
- $FOO::VERSION = '1.10';
- *FOO::VERSION = \'1.11';
-
- but these will fail:
-
- my $VERSION = '1.01';
- local $VERSION = '1.02';
- local $FOO::VERSION = '1.30';
-
- The file named in VERSION_FROM is not added as a
- dependency to Makefile. This is not really correct, but it
- would be a major pain during development to have to
-
-
-
- Page 14 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- rewrite the Makefile for any smallish change in that file.
- If you want to make sure that the Makefile contains the
- correct VERSION macro after any change of the file, you
- would have to do something like
-
- depend => { Makefile => '$(VERSION_FROM)' }
-
- See attribute depend below.
-
- XS
- Hashref of .xs files. MakeMaker will default this. e.g.
-
- {'name_of_file.xs' => 'name_of_file.c'}
-
- The .c files will automatically be included in the list of
- files deleted by a make clean.
-
- XSOPT
- String of options to pass to xsubpp. This might include
- -C++ or -extern. Do not include typemaps here; the
- TYPEMAP parameter exists for that purpose.
-
- XSPROTOARG
- May be set to an empty string, which is identical to
- -prototypes, or -noprototypes. See the xsubpp
- documentation for details. MakeMaker defaults to the empty
- string.
-
- XS_VERSION
- Your version number for the .xs file of this package.
- This defaults to the value of the VERSION attribute.
-
- AAAAddddddddiiiittttiiiioooonnnnaaaallll lllloooowwwweeeerrrrccccaaaasssseeee aaaattttttttrrrriiiibbbbuuuutttteeeessss
-
- can be used to pass parameters to the methods which
- implement that part of the Makefile.
-
- clean
-
- {FILES => "*.xyz foo"}
-
-
- depend
-
- {ANY_TARGET => ANY_DEPENDECY, ...}
-
-
- dist
-
- {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',
- SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
- ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
-
-
-
- Page 15 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- If you specify COMPRESS, then SUFFIX should also be
- altered, as it is needed to tell make the target file of
- the compression. Setting DIST_CP to ln can be useful, if
- you need to preserve the timestamps on your files. DIST_CP
- can take the values 'cp', which copies the file, 'ln',
- which links the file, and 'best' which copies symbolic
- links and links the rest. Default is 'best'.
-
- dynamic_lib
-
- {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
-
-
- installpm
- Deprecated as of MakeMaker 5.23. See the pm_to_blib entry
- in the _E_x_t_U_t_i_l_s::_M_M__U_n_i_x manpage.
-
- linkext
-
- {LINKTYPE => 'static', 'dynamic' or ''}
-
- NB: Extensions that have nothing but *.pm files had to say
-
- {LINKTYPE => ''}
-
- with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker
- such a line can be deleted safely. MakeMaker recognizes,
- when there's nothing to be linked.
-
- macro
-
- {ANY_MACRO => ANY_VALUE, ...}
-
-
- realclean
-
- {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
-
-
- tool_autosplit
-
- {MAXLEN =E<gt> 8}
-
-
- OOOOvvvveeeerrrrrrrriiiiddddiiiinnnngggg MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr MMMMeeeetttthhhhooooddddssss
-
- If you cannot achieve the desired Makefile behaviour by
- specifying attributes you may define private subroutines in
- the Makefile.PL. Each subroutines returns the text it
- wishes to have written to the Makefile. To override a
- section of the Makefile you can either say:
-
-
-
-
- Page 16 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- sub MY::c_o { "new literal text" }
-
- or you can edit the default by saying something like:
-
- sub MY::c_o {
- package MY; # so that "SUPER" works right
- my $inherited = shift->SUPER::c_o(@_);
- $inherited =~ s/old text/new text/;
- $inherited;
- }
-
- If you are running experiments with embedding perl as a
- library into other applications, you might find MakeMaker is
- not sufficient. You'd better have a look at ExtUtils::Embed
- which is a collection of utilities for embedding.
-
- If you still need a different solution, try to develop
- another subroutine that fits your needs and submit the diffs
- to _p_e_r_l_5-_p_o_r_t_e_r_s@_p_e_r_l._o_r_g or _c_o_m_p._l_a_n_g._p_e_r_l._m_o_d_e_r_a_t_e_d as
- appropriate.
-
- For a complete description of all MakeMaker methods see the
- _E_x_t_U_t_i_l_s::_M_M__U_n_i_x manpage.
-
- Here is a simple example of how to add a new target to the
- generated Makefile:
-
- sub MY::postamble {
- '
- $(MYEXTLIB): sdbm/Makefile
- cd sdbm && $(MAKE) all
- ';
- }
-
-
- HHHHiiiinnnnttttssssffffiiiilllleeee ssssuuuuppppppppoooorrrrtttt
-
- MakeMaker.pm uses the architecture specific information from
- Config.pm. In addition it evaluates architecture specific
- hints files in a hints/ directory. The hints files are
- expected to be named like their counterparts in
- PERL_SRC/hints, but with an .pl file name extension (eg.
- next_3_2.pl). They are simply evaled by MakeMaker within the
- _W_r_i_t_e_M_a_k_e_f_i_l_e() subroutine, and can be used to execute
- commands as well as to include special variables. The rules
- which hintsfile is chosen are the same as in Configure.
-
- The hintsfile is _e_v_a_l()ed immediately after the arguments
- given to WriteMakefile are stuffed into a hash reference
- $self but before this reference becomes blessed. So if you
- want to do the equivalent to override or create an attribute
- you would say something like
-
-
-
- Page 17 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- $self->{LIBS} = ['-ldbm -lucb -lc'];
-
-
- DDDDiiiissssttttrrrriiiibbbbuuuuttttiiiioooonnnn SSSSuuuuppppppppoooorrrrtttt
-
- For authors of extensions MakeMaker provides several
- Makefile targets. Most of the support comes from the
- ExtUtils::Manifest module, where additional documentation
- can be found.
-
- make distcheck
- reports which files are below the build directory but
- not in the MANIFEST file and vice versa. (See
- _E_x_t_U_t_i_l_s::_M_a_n_i_f_e_s_t::_f_u_l_l_c_h_e_c_k() for details)
-
- make skipcheck
- reports which files are skipped due to the entries in
- the MANIFEST.SKIP file (See
- _E_x_t_U_t_i_l_s::_M_a_n_i_f_e_s_t::_s_k_i_p_c_h_e_c_k() for details)
-
- make distclean
- does a realclean first and then the distcheck. Note that
- this is not needed to build a new distribution as long
- as you are sure, that the MANIFEST file is ok.
-
- make manifest
- rewrites the MANIFEST file, adding all remaining files
- found (See _E_x_t_U_t_i_l_s::_M_a_n_i_f_e_s_t::_m_k_m_a_n_i_f_e_s_t() for details)
-
- make distdir
- Copies all the files that are in the MANIFEST file to a
- newly created directory with the name $(DISTNAME)-
- $(VERSION). If that directory exists, it will be removed
- first.
-
- make disttest
- Makes a distdir first, and runs a perl Makefile.PL, a
- make, and a make test in that directory.
-
- make tardist
- First does a distdir. Then a command $(PREOP) which
- defaults to a null command, followed by $(TOUNIX), which
- defaults to a null command under UNIX, and will convert
- files in distribution directory to UNIX format
- otherwise. Next it runs tar on that directory into a
- tarfile and deletes the directory. Finishes with a
- command $(POSTOP) which defaults to a null command.
-
- make dist
- Defaults to $(DIST_DEFAULT) which in turn defaults to
- tardist.
-
-
-
-
- Page 18 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- make uutardist
- Runs a tardist first and uuencodes the tarfile.
-
- make shdist
- First does a distdir. Then a command $(PREOP) which
- defaults to a null command. Next it runs shar on that
- directory into a sharfile and deletes the intermediate
- directory again. Finishes with a command $(POSTOP) which
- defaults to a null command. Note: For shdist to work
- properly a shar program that can handle directories is
- mandatory.
-
- make zipdist
- First does a distdir. Then a command $(PREOP) which
- defaults to a null command. Runs $(ZIP) $(ZIPFLAGS) on
- that directory into a zipfile. Then deletes that
- directory. Finishes with a command $(POSTOP) which
- defaults to a null command.
-
- make ci
- Does a $(CI) and a $(RCS_LABEL) on all files in the
- MANIFEST file.
-
- Customization of the dist targets can be done by specifying
- a hash reference to the dist attribute of the WriteMakefile
- call. The following parameters are recognized:
-
- CI ('ci -u')
- COMPRESS ('gzip --best')
- POSTOP ('@ :')
- PREOP ('@ :')
- TO_UNIX (depends on the system)
- RCS_LABEL ('rcs -q -Nv$(VERSION_SYM):')
- SHAR ('shar')
- SUFFIX ('.gz')
- TAR ('tar')
- TARFLAGS ('cvf')
- ZIP ('zip')
- ZIPFLAGS ('-r')
-
- An example:
-
- WriteMakefile( 'dist' => { COMPRESS=>"bzip2", SUFFIX=>".bz2" })
-
-
- DDDDiiiissssaaaabbbblllliiiinnnngggg aaaannnn eeeexxxxtttteeeennnnssssiiiioooonnnn
-
- If some events detected in _M_a_k_e_f_i_l_e._P_L imply that there is
- no way to create the Module, but this is a normal state of
- things, then you can create a _M_a_k_e_f_i_l_e which does nothing,
- but succeeds on all the "usual" build targets. To do so,
- use
-
-
-
- Page 19 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
- ExtUtils::MakeMaker::WriteEmptyMakefile();
-
- instead of _W_r_i_t_e_M_a_k_e_f_i_l_e().
-
- This may be useful if other modules expect this module to be
- _b_u_i_l_t OK, as opposed to _w_o_r_k OK (say, this system-dependent
- module builds in a subdirectory of some other distribution,
- or is listed as a dependency in a CPAN::Bundle, but the
- functionality is supported by different means on the current
- architecture).
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- ExtUtils::MM_Unix, ExtUtils::Manifest, ExtUtils::testlib,
- ExtUtils::Install, ExtUtils::Embed
-
- AAAAUUUUTTTTHHHHOOOORRRRSSSS
- Andy Dougherty <_d_o_u_g_h_e_r_a@_l_a_f_c_o_l._l_a_f_a_y_e_t_t_e._e_d_u>, Andreas
- Koenig <_A._K_o_e_n_i_g@_f_r_a_n_z._w_w._T_U-_B_e_r_l_i_n._D_E>, Tim Bunce
- <_T_i_m._B_u_n_c_e@_i_g._c_o._u_k>. VMS support by Charles Bailey
- <_b_a_i_l_e_y@_g_e_n_e_t_i_c_s._u_p_e_n_n._e_d_u>. OS/2 support by Ilya
- Zakharevich <_i_l_y_a@_m_a_t_h._o_h_i_o-_s_t_a_t_e._e_d_u>. Contact the
- makemaker mailing list mailto:makemaker@franz.ww.tu-
- berlin.de, if you have any questions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 20 (printed 10/23/98)
-
-
-
-
-
-
- EEEExxxxttttUUUUttttiiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeee2222rrrr3333((((////3333OOOO))))cccctttt////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttccccEEEEhhhhxxxxtttt0000UUUU2222tttt))))iiiillllssss::::::::MMMMaaaakkkkeeeeMMMMaaaakkkkeeeerrrr((((3333))))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 21 (printed 10/23/98)
-
-
-
-
-
-
-